
package cjos.ssh;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;
import ch.ethz.ssh2.StreamGobbler;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import ch.ethz.ssh2.Session;

/**
 *
 * @author Jos
 */
public class SSH {

	private Connection conn;
	private Session sess;
	private boolean conectado;
	private SCPClient client;

	public boolean Conecta(String host, String user, String password) {
		try {
			this.conn = new Connection(host);
			conn.connect();
			conectado = conn.authenticateWithPassword(user, password);
		} catch (IOException e) {
			this.conectado = false;
		}
		return this.conectado;
	}

	public void desconecta() {
		if (conn != null) {
			conn.close();
		}
		if (sess != null) {
			sess.close();
		}
	}

	public void abreSesion() {
		try {
			this.sess = conn.openSession();
		} catch (IOException e) {
		}
	}

	public List<String> ejecutaCmd(String cmd) {
		String linea = null;
		List<String> lineas = null;
		try {
			lineas = new ArrayList<String>();
			abreSesion();
			sess.execCommand(cmd);
			InputStream in = new StreamGobbler(sess.getStdout());
			BufferedReader buf22 = new BufferedReader(new InputStreamReader(in));
			while ((linea = (buf22.readLine())) != null) {
				lineas.add(linea);
			}
		} catch (IOException e) {
			System.out.println(e);
		}
		return lineas;
	}


	public boolean cargarArchivo(File archivo, String rutaDestino) {
		boolean cargaExitosa = false;
		try {
			if (client == null) {
				client = conn.createSCPClient();
			}
			client.put(archivo.getAbsolutePath().replace("\\", "\\\\"),
					rutaDestino, "0755");
			cargaExitosa = true;
		} catch (IOException e) {
		}
		return cargaExitosa;
	}

	public static void main(String args[]) {
		SSH ssh = null;

		List<String> lineas = new ArrayList<String>();
		HashMap<String,String>datosCon=null;

		List<HashMap<String,String>> conexiones =new ArrayList<HashMap<String,String>>();


		datosCon=new HashMap<String,String>();
		datosCon.put("host", "127.0.0.1");
		datosCon.put("user", "user");
		datosCon.put("pass", "pass");
		conexiones.add(datosCon);

		StringBuilder comando = new StringBuilder();


		File archivo = new File("C:\\test.txt");
		for(int i =0;i<conexiones.size();i++){
			ssh = new SSH();
			System.out.println("----------> Conectando a :"+conexiones.get(i).get("host"));
			ssh.Conecta(conexiones.get(i).get("host"),conexiones.get(i).get("user"),conexiones.get(i).get("pass"));

			System.out.println("----------> Subiendo Archivo :"+archivo.getAbsolutePath());
			ssh.cargarArchivo(archivo, "/usr/");
			ssh.desconecta();
			System.out.println("----------> Desconectando de :"+conexiones.get(i).get("host"));

		}

		comando.append(" ps -aux | grep tomcat ;");

		if(comando.toString().length()>0){
			for(int i =0;i<conexiones.size();i++){
				System.out.println("----------> Conectando a :"+conexiones.get(i).get("host"));
				    ssh = new SSH();
					ssh.Conecta(conexiones.get(i).get("host"),conexiones.get(i).get("user"),conexiones.get(i).get("pass"));
					lineas = ssh.ejecutaCmd(comando.toString());
					for (int k = 0; k < lineas.size(); k++) {
						System.out.println(lineas.get(k));
					}
					ssh.desconecta();

				System.out.println("----------> Desconectando de :"+conexiones.get(i).get("host"));
			}
		}

		System.out.println("\n----------TERMINA");

	}


}
